package 刷题10月.牛客栈;
import java.util.*;
// https://www.nowcoder.com/practice/37548e94a270412c8b9fb85643c8ccc2?tpId=188&&tqId=38573&rp=1&ru=/activity/oj&qru=/ta/job-code-high-week/question-ranking
public class NC52括号序列1001 {



        /**
         *1.压栈和取栈
         * @param s string字符串
         * @return bool布尔型
         */
        public boolean isValid(String s) {
            Stack<Character> stack = new Stack<>();
            char[] chars = s.toCharArray();
            //遍历所有的元素
            for (char c : chars) {
                //如果是左括号，就把他们对应的右括号压栈
                if (c == '(') {
                    stack.push(')');
                } else if (c == '{') {
                    stack.push('}');
                } else if (c == '[') {
                    stack.push(']');
                } else if (stack.isEmpty() || stack.pop() != c) {
                    //否则就只能是右括号。
                    //1，如果栈为空，说明括号无法匹配。
                    //2，如果栈不为空，栈顶元素就要出栈，和这个右括号比较。
                    //如果栈顶元素不等于这个右括号，说明无法匹配，
                    //直接返回false。
                    return false;
                }
            }
            //最后如果栈为空，说明完全匹配，是有效的括号。
            //否则不完全匹配，就不是有效的括号
            return stack.isEmpty();
        }

}
/*
        2.字符替换
        boolean flag = true;
        while(flag){
            int len = s.length();
            s=s.replace("()","");
            s=s.replace("[]","");
            s=s.replace("{}","");
            if(len == s.length()){
                flag=false;
            }
        }
        return s.length() == 0;
 */
/*
public boolean isValid (String s) {
        Stack<Character> c = new Stack<Character>();
        for(int i = 0 ; i < s.length(); i++){
            if(c.empty()){
                c.push(s.charAt(i));
                continue;
            }
            if(s.charAt(i)==')'&&c.peek()=='('){c.pop();}
            else if(s.charAt(i)=='}'&&c.peek()=='{'){c.pop();}
            else if(s.charAt(i)==']'&&c.peek()=='['){c.pop();}
            else{ c.push(s.charAt(i));}
        }
        return c.empty();
    }
 */
